home *** CD-ROM | disk | FTP | other *** search
/ PC Direct 1998 August / PC Direct August 1998.iso / S / powerj / Product / hpp.z / WDATAVRF.HPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-11-25  |  21.2 KB  |  806 lines

  1.  
  2. #ifndef _WDATAVRF_HPP_INCLUDED
  3. #define _WDATAVRF_HPP_INCLUDED
  4.  
  5. //------------------------------------------------------------------------
  6. //
  7. // WDataValueReference
  8. //
  9. // This class represents data values and is only of interest to
  10. // implementors of new data access models (i.e. subclasses of WDataSource).
  11. //
  12. //
  13. // How reference objects are created:
  14. //
  15. //     The WDVFactory class knows how to create objects of a given type.
  16. //     To create an object you thus call WDVFactory::Allocate, passing
  17. //     in the ID of the type you are interested in creating.  You can also
  18. //     optionally pass in a pointer to an existing WDataValueReference
  19. //     object, which will then be used to initialize the new object.
  20. //
  21. //     To create the new objects, WDVFactory stores prototype objects
  22. //     internally, and then calls the Clone method on the appropriate
  23. //     prototype object.
  24. //
  25. //------------------------------------------------------------------------
  26.  
  27. #ifndef _WOBJECT_HPP_INCLUDED
  28. #include "wobject.hpp"
  29. #endif
  30. #ifndef _WEVENT_HPP_INCLUDED
  31. #include "wevent.hpp"
  32. #endif
  33. #ifndef _WDATAOBJ_HPP_INCLUDED
  34. #include "wdataobj.hpp"
  35. #endif
  36. #ifndef _WVECTOR_HPP_INCLUDED
  37. #include "wvector.hpp"
  38. #endif
  39.  
  40. #define WDV_CONVERSION_METHODS \
  41.                                \
  42.         virtual WBool GetCHAR( WString & s, WDataValue *val ) const; \
  43.         virtual WBool SetCHAR( const WString & string, WDataValue *val ); \
  44.         virtual WBool GetSSHORT( SWORD & s, WDataValue *val ) const; \
  45.         virtual WBool SetSSHORT( SWORD s, WDataValue *val ); \
  46.         virtual WBool GetUSHORT( UWORD & u, WDataValue *val ) const;\
  47.         virtual WBool SetUSHORT( UWORD u, WDataValue *val );\
  48.         virtual WBool GetSLONG( SDWORD & s, WDataValue *val ) const;\
  49.         virtual WBool SetSLONG( SDWORD s, WDataValue *val );\
  50.         virtual WBool GetULONG( UDWORD & u, WDataValue *val ) const;\
  51.         virtual WBool SetULONG( UDWORD u, WDataValue *val );\
  52.         virtual WBool GetFLOAT( SFLOAT & s, WDataValue *val ) const;\
  53.         virtual WBool SetFLOAT( SFLOAT f, WDataValue *val );\
  54.         virtual WBool GetDOUBLE( SDOUBLE & d, WDataValue *val ) const;\
  55.         virtual WBool SetDOUBLE( SDOUBLE d, WDataValue *val );\
  56.         virtual WBool GetBIT( UCHAR & c, WDataValue *val ) const;\
  57.         virtual WBool SetBIT( UCHAR c, WDataValue *val );\
  58.         virtual WBool GetSTINYINT( SCHAR & c, WDataValue *val ) const;\
  59.         virtual WBool SetSTINYINT( SCHAR c, WDataValue *val );\
  60.         virtual WBool GetUTINYINT( UCHAR & c, WDataValue *val ) const;\
  61.         virtual WBool SetUTINYINT( UCHAR c, WDataValue *val );\
  62.         virtual WBool GetBINARY( WBuffer & b, WDataValue *val ) const;\
  63.         virtual WBool SetBINARY( const WBuffer & buf, WDataValue *val );\
  64.         virtual WBool GetBOOKMARK( BOOKMARK & m, WDataValue *val ) const;\
  65.         virtual WBool SetBOOKMARK( BOOKMARK mark, WDataValue *val );  \
  66.         virtual WBool CopyInto( const WDataValueReference & ref ); \
  67.         virtual WBool Clear();
  68.  
  69.  
  70. //
  71. // WDataValueReference -- Abstract class for reference-counted
  72. //                        values.
  73. //
  74.  
  75. class WCMCLASS WDataValueReference : public WReferenceObject {
  76.  
  77.     friend class WDVFactory;
  78.  
  79.     private:
  80.  
  81.         WDataValueReference( const WDataValueReference & tr );
  82.         WDataValueReference & operator=( const WDataValueReference & tr );
  83.  
  84.     protected:
  85.  
  86.         WDataValueReference();
  87.  
  88.     public:
  89.  
  90.         virtual ~WDataValueReference();
  91.  
  92.         virtual WLong Reference();
  93.         virtual WLong Unreference();
  94.         virtual WLong Reference( WDataValue *val );
  95.         virtual WLong Unreference( WDataValue *val );
  96.  
  97.         virtual WNativeDataType GetType() const = 0;
  98.         virtual WBool           SetType( WNativeDataType type,
  99.                                          WDataValue *val );
  100.  
  101.         virtual WNativeDataType GetPromotedType() const;
  102.  
  103.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  104.                                             WDataValue *master=NULL ) const = 0;
  105.  
  106.         virtual WInt  GetSize() const = 0;
  107.         virtual WBool SetSize( WInt newSize );
  108.  
  109.         virtual WInt  GetLength() const;
  110.         virtual WBool SetLength( WInt newLength );
  111.  
  112.         virtual void *GetData() const = 0;
  113.         virtual WBool SetData( void *data, WBool copyOld=FALSE );
  114.  
  115.         virtual WBool Clear();
  116.  
  117.         virtual WBool AcquireDataResponsibility();
  118.  
  119.         virtual WBool DetachReferences( WDataValue *exceptFor );
  120.  
  121.         virtual int operator==( const WDataValueReference & other ) const; 
  122.         virtual int operator<( const WDataValueReference & other ) const; 
  123.         virtual int operator<=( const WDataValueReference & other ) const; 
  124.         virtual int operator!=( const WDataValueReference & other ) const; 
  125.         virtual int operator>( const WDataValueReference & other ) const; 
  126.         virtual int operator>=( const WDataValueReference & other ) const; 
  127.  
  128.         WColumnDataType GetColumnType() const { return _columnType; }
  129.         WBool           SetColumnType( WColumnDataType t ) { _columnType = t; return TRUE; }
  130.  
  131.         virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
  132.         virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
  133.  
  134.         virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
  135.         virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
  136.  
  137.         virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
  138.         virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
  139.  
  140.         // The following methods all have default implementations
  141.         // that return an error.  Override as appropriate.
  142.  
  143.         WDV_CONVERSION_METHODS
  144.  
  145.     protected:
  146.  
  147.         enum {
  148.             WDVSLong  = 0x01,
  149.             WDVULong  = 0x02,
  150.             WDVDouble = 0x04,
  151.             WDVChar   = 0x08
  152.         };
  153.  
  154.         WDataValueReference **GetRef( WDataValue *val ) const;
  155.  
  156.         wllist_header _refList;
  157.  
  158.         WColumnDataType _columnType;
  159. };
  160.  
  161. //
  162. // WDVFloatRef 
  163. //
  164.  
  165. class WCMCLASS WDVFloatRef : public WDataValueReference {
  166.  
  167.     friend class WDVFactory;
  168.  
  169.     private:
  170.  
  171.         WDVFloatRef( const WDVFloatRef & );
  172.         WDVFloatRef & operator=( const WDVFloatRef & );
  173.  
  174.     protected:
  175.  
  176.         WDVFloatRef();
  177.  
  178.     public:
  179.  
  180.         ~WDVFloatRef();
  181.  
  182.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  183.                                             WDataValue *master=NULL ) const;
  184.  
  185.         virtual WNativeDataType GetType() const;
  186.  
  187.         virtual WInt  GetSize() const;
  188.  
  189.         virtual void *GetData() const;
  190.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  191.  
  192.         WDV_CONVERSION_METHODS
  193.  
  194.     protected:
  195.  
  196.         WFloat  _float;
  197.         WFloat *_pFloat;
  198. };
  199.  
  200. //
  201. // WDVDoubleRef 
  202. //
  203.  
  204. class WCMCLASS WDVDoubleRef : public WDataValueReference {
  205.  
  206.     friend class WDVFactory;
  207.  
  208.     private:
  209.  
  210.         WDVDoubleRef( const WDVDoubleRef & );
  211.         WDVDoubleRef & operator=( const WDVDoubleRef & );
  212.  
  213.     protected:
  214.  
  215.         WDVDoubleRef();
  216.  
  217.     public:
  218.  
  219.         ~WDVDoubleRef();
  220.  
  221.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  222.                                             WDataValue *master=NULL ) const;
  223.  
  224.         virtual WNativeDataType GetType() const;
  225.  
  226.         virtual WInt  GetSize() const;
  227.  
  228.         virtual void *GetData() const;
  229.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  230.  
  231.         WDV_CONVERSION_METHODS
  232.  
  233.     protected:
  234.  
  235.         WDouble  _double;
  236.         WDouble *_pDouble;
  237. };
  238.  
  239. //
  240. // WDVCharRef 
  241. //
  242.  
  243. class WCMCLASS WDVCharRef : public WDataValueReference {
  244.  
  245.     friend class WDVFactory;
  246.  
  247.     private:
  248.  
  249.         WDVCharRef( const WDVCharRef & );
  250.         WDVCharRef & operator=( const WDVCharRef & );
  251.  
  252.     protected:
  253.  
  254.         WDVCharRef();
  255.  
  256.     public:
  257.  
  258.         ~WDVCharRef();
  259.  
  260.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  261.                                             WDataValue *master=NULL ) const;
  262.  
  263.         virtual WNativeDataType GetType() const;
  264.  
  265.         virtual WNativeDataType GetPromotedType() const;
  266.  
  267.         virtual WInt  GetSize() const;
  268.         virtual WBool SetSize( WInt newSize );
  269.  
  270.         virtual WInt  GetLength() const;
  271.         virtual WBool SetLength( WInt newLength );
  272.  
  273.         virtual void *GetData() const;
  274.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  275.  
  276.         virtual WBool AcquireDataResponsibility();
  277.  
  278.         virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
  279.         virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
  280.  
  281.         virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
  282.         virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
  283.  
  284.         virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
  285.         virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
  286.  
  287.         WDV_CONVERSION_METHODS
  288.  
  289.     protected:
  290.  
  291.         #define WDVCharBufSize 128
  292.  
  293.         WAnsiChar  *_pString;
  294.         WAnsiChar  *_string;
  295.         WULong      _size;     // including nullchar
  296.         WAnsiChar   _defaultBuffer[ WDVCharBufSize ];
  297. };
  298.  
  299. //
  300. // WDVBinaryRef
  301. //
  302.  
  303. class WCMCLASS WDVBinaryRef : public WDataValueReference {
  304.  
  305.     friend class WDVFactory;
  306.  
  307.     private:
  308.  
  309.         WDVBinaryRef( const WDVBinaryRef & );
  310.         WDVBinaryRef & operator=( const WDVBinaryRef & );
  311.  
  312.     protected:
  313.  
  314.         WDVBinaryRef();
  315.  
  316.     public:
  317.  
  318.         ~WDVBinaryRef();
  319.  
  320.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  321.                                             WDataValue *master=NULL ) const;
  322.  
  323.         virtual WNativeDataType GetType() const;
  324.  
  325.         virtual WInt  GetSize() const;
  326.         virtual WBool SetSize( WInt newSize );
  327.  
  328.         virtual WInt  GetLength() const;
  329.         virtual WBool SetLength( WInt newLength );
  330.  
  331.         virtual void *GetData() const;
  332.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  333.  
  334.         virtual WBool AcquireDataResponsibility();
  335.  
  336.         virtual int operator==( const WDataValueReference & other ) const; 
  337.  
  338.         WDV_CONVERSION_METHODS
  339.  
  340.     protected:
  341.  
  342.         WByte   *_pData;
  343.         WByte   *_data;
  344.         WULong   _size; 
  345.         WULong   _length;
  346. };
  347.  
  348. //
  349. // WDVSLongRef 
  350. //
  351.  
  352. class WCMCLASS WDVSLongRef : public WDataValueReference {
  353.  
  354.     friend class WDVFactory;
  355.  
  356.     private:
  357.  
  358.         WDVSLongRef( const WDVSLongRef & );
  359.         WDVSLongRef & operator=( const WDVSLongRef & );
  360.  
  361.     protected:
  362.  
  363.         WDVSLongRef();
  364.  
  365.     public:
  366.  
  367.         ~WDVSLongRef();
  368.  
  369.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  370.                                             WDataValue *master=NULL ) const;
  371.  
  372.         virtual WNativeDataType GetType() const;
  373.  
  374.         virtual WInt  GetSize() const;
  375.  
  376.         virtual void *GetData() const;
  377.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  378.  
  379.         WDV_CONVERSION_METHODS
  380.  
  381.     protected:
  382.  
  383.         WLong  _long;
  384.         WLong *_pLong;
  385. };
  386.  
  387. //
  388. // WDVULongRef
  389. //
  390.  
  391. class WCMCLASS WDVULongRef : public WDataValueReference {
  392.  
  393.     friend class WDVFactory;
  394.  
  395.     private:
  396.  
  397.         WDVULongRef( const WDVULongRef & );
  398.         WDVULongRef & operator=( const WDVULongRef & );
  399.  
  400.     protected:
  401.  
  402.         WDVULongRef();
  403.  
  404.     public:
  405.  
  406.         ~WDVULongRef();
  407.  
  408.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  409.                                             WDataValue *master=NULL ) const;
  410.  
  411.         virtual WNativeDataType GetType() const;
  412.  
  413.         virtual WInt  GetSize() const;
  414.  
  415.         virtual void *GetData() const;
  416.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  417.  
  418.         WDV_CONVERSION_METHODS
  419.  
  420.     protected:
  421.  
  422.         WULong  _ulong;
  423.         WULong *_pULong;
  424. };
  425.  
  426. //
  427. // WDVSShortRef
  428. //
  429.  
  430. class WCMCLASS WDVSShortRef : public WDataValueReference {
  431.  
  432.     friend class WDVFactory;
  433.  
  434.     private:
  435.  
  436.         WDVSShortRef( const WDVSShortRef & );
  437.         WDVSShortRef & operator=( const WDVSShortRef & );
  438.  
  439.     protected:
  440.  
  441.         WDVSShortRef();
  442.  
  443.     public:
  444.  
  445.         ~WDVSShortRef();
  446.  
  447.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  448.                                             WDataValue *master=NULL ) const;
  449.  
  450.         virtual WNativeDataType GetType() const;
  451.  
  452.         virtual WInt  GetSize() const;
  453.  
  454.         virtual void *GetData() const;
  455.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  456.  
  457.         WDV_CONVERSION_METHODS
  458.  
  459.     protected:
  460.  
  461.         WShort  _short;
  462.         WShort *_pShort;
  463. };
  464.  
  465. //
  466. // WDVSTinyIntRef
  467. //
  468.  
  469. class WCMCLASS WDVSTinyIntRef : public WDataValueReference {
  470.  
  471.     friend class WDVFactory;
  472.  
  473.     private:
  474.  
  475.         WDVSTinyIntRef( const WDVSTinyIntRef & );
  476.         WDVSTinyIntRef & operator=( const WDVSTinyIntRef & );
  477.  
  478.     protected:
  479.  
  480.         WDVSTinyIntRef();
  481.  
  482.     public:
  483.  
  484.         ~WDVSTinyIntRef();
  485.  
  486.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  487.                                             WDataValue *master=NULL ) const;
  488.  
  489.         virtual WNativeDataType GetType() const;
  490.  
  491.         virtual WInt  GetSize() const;
  492.  
  493.         virtual void *GetData() const;
  494.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  495.  
  496.         WDV_CONVERSION_METHODS
  497.  
  498.     protected:
  499.  
  500.         signed char  _schar;
  501.         signed char *_pSChar;
  502. };
  503.  
  504. //
  505. // WDVUShortRef
  506. //
  507.  
  508. class WCMCLASS WDVUShortRef : public WDataValueReference {
  509.  
  510.     friend class WDVFactory;
  511.  
  512.     private:
  513.  
  514.         WDVUShortRef( const WDVUShortRef & );
  515.         WDVUShortRef & operator=( const WDVUShortRef & );
  516.  
  517.     protected:
  518.  
  519.         WDVUShortRef();
  520.  
  521.     public:
  522.  
  523.         ~WDVUShortRef();
  524.  
  525.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  526.                                             WDataValue *master=NULL ) const;
  527.  
  528.         virtual WNativeDataType GetType() const;
  529.  
  530.         virtual WInt  GetSize() const;
  531.  
  532.         virtual void *GetData() const;
  533.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  534.  
  535.         WDV_CONVERSION_METHODS
  536.  
  537.     protected:
  538.  
  539.         WUShort  _ushort;
  540.         WUShort *_pUShort;
  541. };
  542.  
  543. //
  544. // WDVUTinyIntRef
  545. //
  546.  
  547. class WCMCLASS WDVUTinyIntRef : public WDataValueReference {
  548.  
  549.     friend class WDVFactory;
  550.  
  551.     private:
  552.  
  553.         WDVUTinyIntRef( const WDVUTinyIntRef & );
  554.         WDVUTinyIntRef & operator=( const WDVUTinyIntRef & );
  555.  
  556.     protected:
  557.  
  558.         WDVUTinyIntRef();
  559.  
  560.     public:
  561.  
  562.         ~WDVUTinyIntRef();
  563.  
  564.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  565.                                             WDataValue *master=NULL ) const;
  566.  
  567.         virtual WNativeDataType GetType() const;
  568.  
  569.         virtual WInt  GetSize() const;
  570.  
  571.         virtual void *GetData() const;
  572.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  573.  
  574.         WDV_CONVERSION_METHODS
  575.  
  576.     protected:
  577.  
  578.         unsigned char  _uchar;
  579.         unsigned char *_pUChar;
  580. };
  581.  
  582. //
  583. // WDVBitRef
  584. //
  585.  
  586. class WCMCLASS WDVBitRef : public WDVUTinyIntRef {
  587.  
  588.     friend class WDVFactory;
  589.  
  590.     private:
  591.  
  592.         WDVBitRef( const WDVBitRef & );
  593.         WDVBitRef & operator=( const WDVBitRef & );
  594.  
  595.     protected:
  596.  
  597.         WDVBitRef();
  598.  
  599.     public:
  600.  
  601.         ~WDVBitRef();
  602.  
  603.         virtual WNativeDataType GetType() const;
  604. };
  605.  
  606. //
  607. // WDVDateRef
  608. //
  609.  
  610. class WCMCLASS WDVDateRef : public WDataValueReference {
  611.  
  612.     friend class WDVFactory;
  613.  
  614.     private:
  615.  
  616.         WDVDateRef( const WDVDateRef & );
  617.         WDVDateRef & operator=( const WDVDateRef & );
  618.  
  619.     protected:
  620.  
  621.         WDVDateRef();
  622.  
  623.     public:
  624.  
  625.         ~WDVDateRef();
  626.  
  627.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  628.                                             WDataValue *master=NULL ) const;
  629.  
  630.         virtual WNativeDataType GetType() const;
  631.  
  632.         virtual WInt  GetSize() const;
  633.  
  634.         virtual void *GetData() const;
  635.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  636.  
  637.         virtual WBool CopyInto( const WDataValueReference & ref );
  638.         virtual WBool Clear();
  639.  
  640.         virtual WBool GetCHAR( WString & s, WDataValue *val ) const; 
  641.         virtual WBool SetCHAR( const WString & string, WDataValue *val ); 
  642.  
  643.         virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
  644.         virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
  645.  
  646.         virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
  647.         virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
  648.  
  649.         virtual int operator==( const WDataValueReference & other ) const; 
  650.         virtual int operator<( const WDataValueReference & other ) const;
  651.         virtual int operator<=( const WDataValueReference & other ) const; 
  652.  
  653.     protected:
  654.  
  655.         DATE_STRUCT  _date;
  656.         DATE_STRUCT *_pDate;
  657. };
  658.  
  659. //
  660. // WDVTimeRef
  661. //
  662.  
  663. class WCMCLASS WDVTimeRef : public WDataValueReference {
  664.  
  665.     friend class WDVFactory;
  666.  
  667.     private:
  668.  
  669.         WDVTimeRef( const WDVTimeRef & );
  670.         WDVTimeRef & operator=( const WDVTimeRef & );
  671.  
  672.     protected:
  673.  
  674.         WDVTimeRef();
  675.  
  676.     public:
  677.  
  678.         ~WDVTimeRef();
  679.  
  680.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  681.                                             WDataValue *master=NULL ) const;
  682.  
  683.         virtual WNativeDataType GetType() const;
  684.  
  685.         virtual WInt  GetSize() const;
  686.  
  687.         virtual void *GetData() const;
  688.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  689.  
  690.         virtual WBool CopyInto( const WDataValueReference & ref ); 
  691.         virtual WBool Clear();
  692.  
  693.         virtual WBool GetCHAR( WString & s, WDataValue *val ) const; 
  694.         virtual WBool SetCHAR( const WString & string, WDataValue *val ); 
  695.  
  696.         virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
  697.         virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
  698.  
  699.         virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
  700.         virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
  701.  
  702.         virtual int operator==( const WDataValueReference & other ) const; 
  703.         virtual int operator<( const WDataValueReference & other ) const;
  704.         virtual int operator<=( const WDataValueReference & other ) const; 
  705.  
  706.     protected:
  707.  
  708.         TIME_STRUCT  _time;
  709.         TIME_STRUCT *_pTime;
  710. };
  711.  
  712. //
  713. // WDVTimeStampRef
  714. //
  715.  
  716. class WCMCLASS WDVTimeStampRef : public WDataValueReference {
  717.  
  718.     friend class WDVFactory;
  719.  
  720.     private:
  721.  
  722.         WDVTimeStampRef( const WDVTimeStampRef & );
  723.         WDVTimeStampRef & operator=( const WDVTimeStampRef & );
  724.  
  725.     protected:
  726.  
  727.         WDVTimeStampRef();
  728.  
  729.     public:
  730.  
  731.         ~WDVTimeStampRef();
  732.  
  733.         virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
  734.                                             WDataValue *master=NULL ) const;
  735.  
  736.         virtual WNativeDataType GetType() const;
  737.  
  738.         virtual WInt  GetSize() const;
  739.  
  740.         virtual void *GetData() const;
  741.         virtual WBool SetData( void *newData, WBool copyOld=FALSE );
  742.  
  743.         virtual WBool CopyInto( const WDataValueReference & ref ); 
  744.         virtual WBool Clear();
  745.  
  746.         virtual WBool GetCHAR( WString & s, WDataValue *val ) const; 
  747.         virtual WBool SetCHAR( const WString & string, WDataValue *val ); 
  748.  
  749.         virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
  750.         virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
  751.  
  752.         virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
  753.         virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
  754.  
  755.         virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
  756.         virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
  757.  
  758.         virtual int operator==( const WDataValueReference & other ) const; 
  759.         virtual int operator<( const WDataValueReference & other ) const;
  760.         virtual int operator<=( const WDataValueReference & other ) const; 
  761.  
  762.     protected:
  763.  
  764.         TIMESTAMP_STRUCT  _timeStamp;
  765.         TIMESTAMP_STRUCT *_pTimeStamp;
  766. };
  767.  
  768. extern template WVector<WDataValueReference>;
  769.  
  770. //
  771. // WDVFactory
  772. //
  773.  
  774. class WCMCLASS WDVFactory : public WObject {
  775.  
  776.     protected:
  777.         WDVFactory();
  778.  
  779.         ~WDVFactory();
  780.  
  781.         void Init();
  782.  
  783.     public:
  784.         static WDVFactory *GetFactoryObject();
  785.  
  786.         static WDataValueReference *Allocate( WNativeDataType type,
  787.                                               WDataValueReference *ref=NULL,
  788.                                               WDataValue *master=NULL );
  789.         static WDataValueReference *Allocate( const WChar *name,
  790.                                               WDataValueReference *ref=NULL,
  791.                                               WDataValue *master=NULL );
  792.  
  793.         static WBool AddPrototype( WDataValueReference *prototype );
  794.  
  795.         static WVector<WDataValueReference> *GetPrototypeList();
  796.  
  797.     protected:
  798.         WVector<WDataValueReference> _prototypes;
  799.         WBool                        _init;
  800.  
  801.     private:
  802.         static WDVFactory *_theObject;
  803. };
  804.  
  805. #endif
  806.